package com.longxi.tianjintianbao.utils;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.text.TextUtils;
import android.util.Base64;
import android.widget.Toast;

import com.longxi.tianjintianbao.MyApplication;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * Created by kuma on 2017/10/11.
 * 我的工具
 */

public class MyUtils {

    public static Toast mToast;
    private static int[] textColor = {Color.rgb(51,151,218),
            Color.rgb(44,62,80),
            Color.rgb(41,128,185),
            Color.rgb(26,188,156),
            Color.rgb(155,89,182),
            Color.rgb(39,174,96),
            Color.rgb(230,126,34),
            Color.rgb(241,196,15),
            Color.rgb(0,0,0),
            Color.rgb(211,84,0),
            Color.rgb(231,76,60),
            Color.rgb(192,57,43),
            Color.rgb(236,160,241),
            Color.rgb(189,195,199),
            Color.rgb(149,168,166)};

    /*
     *文字转图片
     */
    public static Bitmap textAsBitmap(String text, int textSize) {
        Bitmap bitmap = Bitmap.createBitmap(textSize,textSize, Bitmap.Config.ARGB_8888);//创建一个宽度和高度都是400、32位ARGB图
        Canvas canvas =new Canvas(bitmap);//初始化画布绘制的图像到icon上

        ChineseCharToEn c = new ChineseCharToEn();
        String initial = c.getAllFirstLetter(text);//获取文字首字母
        int i = c.getEnglishNum(initial);//获取首字母在26个字母中站第几位

//        canvas.drawColor(textColor[i%textColor.length]);//图层的背景色
        Paint paint =new Paint(Paint.ANTI_ALIAS_FLAG| Paint.DEV_KERN_TEXT_FLAG);//创建画笔
        paint.setTextSize(textSize*5/8f);//设置文字的大小
        paint.setTypeface(Typeface.DEFAULT_BOLD);//文字的样式(加粗)

        RectF r1 = new RectF();
        paint.setColor(textColor[i%textColor.length]);//添加画笔颜色
        r1.left = 0;
        r1.right = textSize;
        r1.top = 0 ;
        r1.bottom = textSize;
        canvas.drawRoundRect(r1, 50, 50, paint);

        paint.setColor(Color.WHITE);//文字的颜色
        canvas.drawText(text,textSize*3/16, textSize*3/4, paint);//将文字写入。这里面的（120，130）代表着文字在图层上的初始位置
        canvas.save(canvas.ALL_SAVE_FLAG);//保存所有图层
        canvas.restore();
        return bitmap;
    }

    public static void showToast(String msg) {
        if("系统错误！".equals(msg)){
            msg = "服务器繁忙请稍后再试";
        }
        showToast(msg, Toast.LENGTH_SHORT);
    }

    public static void showToast(String msg, int duration) {
        if (mToast == null) {
            mToast = Toast.makeText(getContext(), "", duration);
        }
        mToast.setText(msg);
        mToast.show();
    }

    /**
     * 得到上下文
     *
     * @return
     */
    public static Context getContext() {
        return MyApplication.getInstance();
    }

    /**
     * 得到string.xml中的字符串
     *
     * @param resId
     * @return
     */
    public static String getString(int resId) {
        return getResource().getString(resId);
    }

    /**
     * 得到resources对象
     *
     * @return
     */
    public static Resources getResource() {
        return getContext().getResources();
    }

    /**
     * 根据斜杆将字符串转换并倒序
     * @param diagonalSwitch
     * @return
     */
    public static String accordDiagonalSwitchString(String diagonalSwitch){
        List<String> list= Arrays.asList(diagonalSwitch.split("/"));
        Collections.reverse(list);
        String ds = "";
        for (String s : list){
            ds += s;
        }
        return ds;
    }

    /**
     * 将图片转换成Base64编码的字符串
     * @param path
     * @return base64编码的字符串
     */
    public static String imageToBase64(String path){
        if(TextUtils.isEmpty(path)){
            return null;
        }
        InputStream is = null;
        byte[] data = null;
        String result = null;
        try{
            is = new FileInputStream(path);
            //创建一个字符流大小的数组。
            data = new byte[is.available()];
            //写入数组
            is.read(data);
            //用默认的编码格式进行编码
            result = Base64.encodeToString(data,Base64.DEFAULT);
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if(null !=is){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
        return result;
    }

    public static Bitmap imageZoom(String imagePath, int maxSize) {
        Bitmap bitmap = getImageFromLocal(imagePath);
        //图片允许最大空间   单位：KB
        //将bitmap放至数组中，意在bitmap的大小（与实际读取的原文件要大）

        if(bitmap == null){
            return null;
        }

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] b = baos.toByteArray();
        //将字节换成KB
        double mid = b.length/1024;
        //判断bitmap占用空间是否大于允许最大空间  如果大于则压缩 小于则不压缩
        if (mid > maxSize) {
            //获取bitmap大小 是允许最大大小的多少倍
            double i = mid / maxSize;
            //开始压缩  此处用到平方根 将宽带和高度压缩掉对应的平方根倍 （1.保持刻度和高度和原bitmap比率一致，压缩后也达到了最大大小占用空间的大小）
            bitmap = zoomImage(bitmap, bitmap.getWidth() / Math.sqrt(i),
                    bitmap.getHeight() / Math.sqrt(i));
        }
        return bitmap;
    }



    /***
     * 图片的缩放方法
     *
     * @param bgimage
     *            ：源图片资源
     * @param newWidth
     *            ：缩放后宽度
     * @param newHeight
     *            ：缩放后高度
     * @return
     */
    public static Bitmap zoomImage(Bitmap bgimage, double newWidth,
                                   double newHeight) {
        // 获取这个图片的宽和高
        float width = bgimage.getWidth();
        float height = bgimage.getHeight();
        // 创建操作图片用的matrix对象
        Matrix matrix = new Matrix();
        // 计算宽高缩放率
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        // 缩放图片动作
        matrix.postScale(scaleWidth, scaleHeight);
        Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, (int) width,
                (int) height, matrix, true);
        return bitmap;
    }

    /**
     * 从SD卡加载图片
     *
     * @param imagePath
     * @return
     */
    public static Bitmap getImageFromLocal(String imagePath) {
        File file = new File(imagePath);
        if (file.exists()) {
            Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
            // file.setLastModified(System.currentTimeMillis());
            return bitmap;
        }
        return null;
    }
}
